 
use async_trait::async_trait;
use std::any::Any;
use std::sync::Arc;

// 为简单起见，我们定义流数据为 Any 类型，实际应用中可以是更具体的结构体或枚举
// 使用 Arc 来允许数据在多个订阅者之间共享所有权而无需克隆
pub type StreamData = Arc<dyn Any + Send + Sync>;

/// 流读取器接口
#[async_trait]
pub trait IStreamReader: Send + Sync {
    async fn read(&mut self) -> Option<StreamData>;
}

/// 流写入器接口
#[async_trait]
pub trait IStreamWriter: Send + Sync {
    async fn write(&self, data: StreamData) -> Result<(), String>;
    async fn close(&self);
}